p(a). p(b). p(c). collect(U,L) :- (p(X),nonmem(X,U)) -> collect([X|U],L);L=U. nonmem(X,[]). nonmem(X,[X|L]) :- !,fail. nonmem(X,[Y|L]) :- nonmem(X,L).